SQL Azure的安全性可以分為兩個部份,一個是防火牆設定,另一個則是帳戶的管理與授權設定。
SQL Azure的防火牆是內含在Gateway中的一個設定,每一台SQL Azure Server都可以擁有自己的防火牆設定,只要進入Management Portal的SQL Azure伺服器管理介面,就可以看到防火牆的設定規則。
如果要新增防火牆的規則,只要按下『加入』,即會出現一個設定的畫面:
設定畫面中預設會帶出目前本機的IP位址,基本上如果只要允許本機連線到SQL Azure,只要把本機的IP位址貼到開始和結束的欄位,並給定名稱後即可,如果防火牆沒有允許連線的話,在連線時會看到這個訊息:
而除了透過管理工具以外,我們還可以利用內建的stored procedure來做這件事,這兩個stored procedure都在master資料庫內,所以必須要用管理員帳戶連接到master資料庫才能做:
另一個安全機制就是帳戶與權限的機制了,依SQL Azure的設計,所有使用者帳戶(Logins)都存在master資料庫內,而管理帳戶的SQL指令CREATE LOGIN、ALTER LOGIN與DROP LOGIN都只能在master資料庫中執行,而且密碼和使用者名稱都有限制,SQL Azure Server 登入的密碼,必須要是符合高強度密碼的規則,亦即密碼字元中必須要符合下列規則,如果不符以下的規則,那麼SQL Azure Server會回傳『Password validation failed. The password does not meet Windows policy requirements because it is too short.』或類似於此的訊息。
SQL Azure亦不像本地的SQL Server般有十數個伺服器群組,它只有兩個伺服器級的群組:dbmanager與loginmanager,分別代表資料庫以及帳戶的權限,而SQL Azure和SQL Server在安全管理上的異同可參照下表。
在一開始建立好SQL Azure Server時,只有一個Server-level principal帳戶,您可以使用Transact-SQL的CREATE LOGIN指令新增新的資料庫登入,這點和SQL Server的登入帳戶是相同的,但SQL Azure Server只能建立以SQL驗證方式驗證的登入帳戶,建立登入的SQL指令很簡單:
CREATE LOGIN [login_name] WITH PASSWORD = '[password for this login]'
當帳戶建立完成後,只是一個普通的登入帳戶,若想要讓帳戶具有特別的功能(管理登入帳戶或建立資料庫)時,就必須要將帳戶加到特定的安全性群組中。最常見的情況是SQL Azure Server的管理員將資料庫管理權限交給專案團隊或是開發人員,由他們來決定登入的帳戶以及資料庫的設置等等。若想要將帳戶加入安全性群組,則首先必須要將它設為可存取master資料庫的使用者,亦即要先使用CREATE USER來加入登入帳戶。
CREATE USER [user_name] FROM LOGIN [login_name]
加入帳戶至master資料庫後,即可使用系統預存程序sp_addrolemember將它加入安全性群組中(移除則是用sp_droprolemember)。
--將使用者加入dbmanager群組:
EXEC sp_addrolemember 'dbmanager', '[db_user_name]'
--將使用者加入loginmanager群組:
EXEC sp_addrolemember 'loginmanager', '[db_user_name]'
若想要將登入帳戶設定給指定的資料庫,則請在建立好資料庫後,切換到該資料庫(不可使用USE指令),再使用CREATE USER來設定允許存取該資料庫的使用者(登入帳戶必須要先在master資料庫使用CREATE LOGIN建立好)即可。而針對資料庫層次的安全性,像是schema、permission等等,都與獨立安裝的SQL Server功能相同,可參考SQL Server線上書籍或是坊間的SQL Server管理書籍來學習這部份的管理指令。
Reference:
http://msdn.microsoft.com/en-us/library/ee336235.aspx
http://msdn.microsoft.com/en-us/library/ee621782.aspx